cesanta / v7

Embedded JavaScript engine for C/C++
Other
1.43k stars 177 forks source link

Trouble passing "true", "false" and "null" #585

Open fabiosantoscode opened 7 years ago

fabiosantoscode commented 7 years ago

Some values can't be passed directly to a function.

I was trying to pass true as the first argument to a function, but it got turned into undefined. From what I've seen this happens with false and null as well.

Check the below example and its output (from running ./v7 file.js), written in the comments:

'use strict'

function fn(a, b) { print("a: " + a + ", b: " + b) }

fn(3, 2) // a: 3, b: 2 
fn(true) // a: undefined, b: undefined 
fn(true, true) // a: true, b: undefined 
fn(true, "foo") // a: true, b: foo 

If instead you put the true value in a variable and pass it through that variable, everything works well.

print('-- from a variable')
var trueVar = true

fn(trueVar) // a: true, b: undefined 
fn(trueVar, trueVar) // a: true, b: true 
fn(trueVar, "foo") // a: true, b: foo 

Everything works if true is generated from any expression as well.

I compiled the latest master (as of today) of v7 with the following command:

gcc -O0 -DV7_EXE -DV7_ENABLE_STACK_TRACKING -DV7_ENABLE_FILE v7.c -lm

But even when keeping only -DV7_EXE I can still reproduce this issue.

cpq commented 7 years ago

we are not actively working on v7, please use https://github.com/cesanta/mjs

ozlb commented 7 years ago

is there any migration guide from v7 to mjs?

cpq commented 7 years ago

No. The API is quite similar though.