Skip to content

Instantly share code, notes, and snippets.

@tuchida
tuchida / goto.js
Last active December 20, 2015 01:58
Rhino GOTO
function traverseFn(node, fn) {
var parents = [];
(function f(node) {
fn(node, parents);
parents.push(node);
for (var c in Iterator(node)) {
f(c);
}
parents.pop();
})(node);
@tuchida
tuchida / visitor.js
Created July 22, 2013 09:36
Nashorn Parser
function parse(str) {
var ir = Packages.jdk.nashorn.internal.ir;
var runtime = Packages.jdk.nashorn.internal.runtime;
var parser = Packages.jdk.nashorn.internal.parser;
var context = runtime.Context.getContext();
var source = new runtime.Source('test', str);
var node = new parser.Parser(context.getEnv(), source, new runtime.Context.ThrowErrorManager(), true).parse();
var lexContext = new ir.LexicalContext();
@tuchida
tuchida / app.js
Created January 10, 2014 06:40
Server-Sent Eventsテスト
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.type('text/html');
res.send('<script>' +
'new EventSource(\'/event/a\').addEventListener(\'message\',function(event) {' +
'document.body.appendChild(document.createElement(\'div\')).textContent = event.data;' +
'});' +
'</script>');
@tuchida
tuchida / asmfn.js
Created February 20, 2013 04:19
macro(sweet.js) for asm.js
macro asmfn {
case $name:ident ($params ...) { $body ... } => {
function $name(asmfn_params($params ...)) {
'use asm';
asmfn_convparams($params ...)
$body ...
}
}
// case $name:ident ($params ...): $ret_type { $body ... } => {
// macro ret {
@tuchida
tuchida / benchmark-findPrototypeId.js
Last active March 20, 2021 05:06
Make findPrototypeId faster
var props = [
"constructor",
"toString",
"toSource",
"valueOf",
"charAt",
"charCodeAt",
"indexOf",
"lastIndexOf",
"split",
@tuchida
tuchida / ParserException.md
Last active April 7, 2021 01:15
Rhinoで1=1がParserExceptionになる問題

調査中なので推測や誤解があるものとして読んでください。

事象

Rhinoで 1=1 を評価すると ParserException が発生する

$ java -jar buildGradle/libs/rhino-1.7.14-SNAPSHOT.jar -version 200
Rhino 1.7.14-SNAPSHOT 2021 04 04
js> 1 = 1
diff --git a/src/org/mozilla/javascript/optimizer/Codegen.java b/src/org/mozilla/javascript/optimizer/Codegen.java
index 7e518cc3..99901b1f 100644
--- a/src/org/mozilla/javascript/optimizer/Codegen.java
+++ b/src/org/mozilla/javascript/optimizer/Codegen.java
@@ -301,6 +301,11 @@ public class Codegen implements Evaluator {
emitTemplateLiteralInit(cfw);
emitConstantDudeInitializers(cfw);
+ try {
+ java.nio.file.Files.write(java.nio.file.Paths.get("try.class"), cfw.toByteArray());