Skip to content

Commit

Permalink
Perlito5 - javascript: fix \&
Browse files Browse the repository at this point in the history
  • Loading branch information
fglock committed Feb 28, 2012
1 parent ad2273d commit f3c54e4
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 5 deletions.
2 changes: 1 addition & 1 deletion ChangeLog
Expand Up @@ -11,7 +11,7 @@ Perlito Perl 5:


- javascript backend: - javascript backend:
-- symbol tables; typeglobs -- symbol tables; typeglobs
-- scalar references; hash references -- references
-- perlito5 calling convention is incompatible with native javascript -- perlito5 calling convention is incompatible with native javascript
The last commit using native javascript data is "e1e3316b" The last commit using native javascript data is "e1e3316b"
-- native javascript can be accessed with JS::inline('string') -- native javascript can be accessed with JS::inline('string')
Expand Down
8 changes: 5 additions & 3 deletions README-perlito5-js
Expand Up @@ -16,7 +16,7 @@ Array
- native [] - native []


Scalar Scalar
- native values - native value


HashRef HashRef
- native {} wrapped in a "HashRef" object - native {} wrapped in a "HashRef" object
Expand All @@ -27,6 +27,9 @@ ArrayRef
ScalarRef ScalarRef
- native value wrapped in a "ScalarRef" object - native value wrapped in a "ScalarRef" object


CodeRef
- native value

Object Object
- one of the reference types, with a _class_ attribute - one of the reference types, with a _class_ attribute


Expand All @@ -47,10 +50,9 @@ Calling context ("wantarray", caller)


Alias Alias
- TODO - TODO
- We could probably use String/Boolean/Number (boxed types) as SCALARs - using String/Boolean/Number (boxed types) as SCALARs doesn't seem to work


List (eg. subroutine return value) List (eg. subroutine return value)
- TODO
- native [] - native []


AUTOLOAD AUTOLOAD
Expand Down
8 changes: 8 additions & 0 deletions html/perlito5.js
Expand Up @@ -2896,6 +2896,14 @@ make_sub(__PACKAGE__, "emit_javascript_indented", function () {
})(); }; })(); };
if ( bool(((v_arg._class_.sigil(v_arg) == '%'))) ) { (function () { if ( bool(((v_arg._class_.sigil(v_arg) == '%'))) ) { (function () {
throw(('(new HashRef(' + string(v_arg._class_.emit_javascript(v_arg)) + '))'));; throw(('(new HashRef(' + string(v_arg._class_.emit_javascript(v_arg)) + '))'));;
})(); };
if ( bool(((v_arg._class_.sigil(v_arg) == '&'))) ) { (function () {
if ( bool(((v_arg ? v_arg : v_arg = new HashRef({}))._hash_[('namespace')])) ) { (function () {
throw(('NAMESPACE[' + String.fromCharCode(34) + string((v_arg ? v_arg : v_arg = new HashRef({}))._hash_[('namespace')]) + String.fromCharCode(34) + '].' + string((v_arg ? v_arg : v_arg = new HashRef({}))._hash_[('name')])));;
})(); }
else { (function () {
throw(('PKG.' + string((v_arg ? v_arg : v_arg = new HashRef({}))._hash_[('name')])));;
})(); };;
})(); };; })(); };;
})(); }; })(); };
throw(('(new ScalarRef(' + string(v_arg._class_.emit_javascript(v_arg)) + '))'));; throw(('(new ScalarRef(' + string(v_arg._class_.emit_javascript(v_arg)) + '))'));;
Expand Down
8 changes: 8 additions & 0 deletions lib5/Perlito5/Javascript/Emitter.pm
Expand Up @@ -507,6 +507,14 @@ package Apply;
}; };
if ((($arg->sigil() eq chr(37)))) { if ((($arg->sigil() eq chr(37)))) {
return (('(new HashRef(' . $arg->emit_javascript() . '))')) return (('(new HashRef(' . $arg->emit_javascript() . '))'))
};
if ((($arg->sigil() eq chr(38)))) {
if (($arg->{('namespace')})) {
return (('NAMESPACE[' . chr(34) . $arg->{('namespace')} . chr(34) . '].' . $arg->{('name')}))
}
else {
return (('PKG.' . $arg->{('name')}))
}
} }
}; };
return (('(new ScalarRef(' . $arg->emit_javascript() . '))')) return (('(new ScalarRef(' . $arg->emit_javascript() . '))'))
Expand Down
9 changes: 8 additions & 1 deletion src5/lib/Perlito5/Javascript/Emitter.pm
Expand Up @@ -615,8 +615,15 @@ package Apply;
if ( $arg->sigil eq '%' ) { if ( $arg->sigil eq '%' ) {
return '(new HashRef(' . $arg->emit_javascript . '))'; return '(new HashRef(' . $arg->emit_javascript . '))';
} }
if ( $arg->sigil eq '&' ) {
if ($arg->{"namespace"}) {
return 'NAMESPACE["' . $arg->{"namespace"} . '"].' . $arg->{"name"};
}
else {
return 'PKG.' . $arg->{"name"};
}
}
} }
# XXX \&x should return a CODE ref
return '(new ScalarRef(' . $arg->emit_javascript . '))'; return '(new ScalarRef(' . $arg->emit_javascript . '))';
} }


Expand Down

0 comments on commit f3c54e4

Please sign in to comment.