Comments (5)
Thanks for trying this out @yisonPylkita !
Yeah I haven't done any work on regular expressions yet, so it doesn't know how to handle those tokens. I can break it down why this doesn't work.
Lexer
If you look here, the lexer doesn't create any literal regular expression tokens, only divide, single line comments and multi-line comments https://github.com/jasonwilliams/boa/blob/master/src/lib/syntax/lexer.rs#L361-L388
We can prove this by looking at the token output for your source code, we end up with an identifier
between 2 divide
tokens which is clearly wrong
[
Token {
data: Keyword(
Var
),
pos: Position {
column_number: 1,
line_number: 1
}
},
Token {
data: Identifier(
"re2"
),
pos: Position {
column_number: 5,
line_number: 1
}
},
Token {
data: Punctuator(
Assign
),
pos: Position {
column_number: 9,
line_number: 1
}
},
Token {
data: Punctuator(
Div
),
pos: Position {
column_number: 11,
line_number: 1
}
},
Token {
data: Identifier(
"abc"
),
pos: Position {
column_number: 12,
line_number: 1
}
},
Token {
data: Punctuator(
Div
),
pos: Position {
column_number: 15,
line_number: 1
}
},
Token {
data: Punctuator(
Semicolon
),
pos: Position {
column_number: 16,
line_number: 1
}
}
]
We would need to add some additional logic here to check for an expresion between the 2 /
characters and mark that value as a regex token.
I actually think this is pretty dooable.
Parser
If you're interested, the error is being emitted from here:
https://github.com/jasonwilliams/boa/blob/master/src/lib/syntax/parser.rs#L524
There are not expressions currently that begin with a /
so that case isn't covered and it just fails.
We would need to create a new Const::RegExp()
expression here and then return it similar to this https://github.com/jasonwilliams/boa/blob/master/src/lib/syntax/parser.rs#L303
The error message could also be a bit more helpful too.
from boa.
Thanks for a quick replay.
Woow, that is a quite detailed problem description. It will definitely help me with a PR. I will start working on this in coming week.
from boa.
@yisonPylkita how you getting on?
from boa.
@yisonPylkita work has happened on this here:
jasonwilliams#94
from boa.
Milestone has now been created for regular expressions so this can be closed:
https://github.com/jasonwilliams/boa/milestone/3
from boa.
Related Issues (20)
- Implement `[[HostDefined]]` for `Module` and `Script` HOT 2
- Promise all runs concurrently instead of joining HOT 2
- Array.shift is very slow HOT 3
- Optimize arrays and array operations
- Web Api support? HOT 2
- oxc as AST Parser? HOT 2
- Add Boa to Test262-Harness
- Cancel/Interrupt active evaluation HOT 3
- perf issue: basic loop is 10 times slower than QJS and 100 times slower than Node
- RegExp exec failed HOT 4
- Move out ICU blobs
- Consider moving some builtins to the `NativeObject` variant of `JsObject` HOT 2
- Add tests for `JsSymbol` HOT 7
- Make a pre-parsing phase to analyze variable scopes
- Calling a function with parameters that was imported via "require/module.exports" causes an error HOT 1
- Function name cannot be reassigned in it's scope.
- How do you properly call an async function under tokio?
- Variables declared without var are not recognized as global in Non-Strict Mode. HOT 4
- Realm `host_defined` and `host_defined_mut` functions aren't accessible HOT 2
- Rust async function stuck indefinitely when called from js HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from boa.