async functions, parameters, directive updates
parent
1a1a0c0c62
commit
0d232b3427
24
grammar.ne
24
grammar.ne
|
|
@ -3,15 +3,21 @@
|
|||
PROGRAM -> _ STATEMENT:+ _ {% ([,stuff,]) => { return stuff } %}
|
||||
|
||||
STATEMENT -> _ LINK_DECLARATION EOL {% ([,stuff]) => { return stuff } %}
|
||||
| _ IDENTIFIER _ JS_BLOCK EOL {% ([,name,,block]) => { return { type: 'function', name: name, block } } %}
|
||||
| _ FUNCTION_DECLARATION EOL {% ([,d]) => d %}
|
||||
| _ %NAMESPACE __ NAMESPACE EOL {% ([,,,namespace]) => { return { type: 'namespace', namespace: namespace[0] } } %}
|
||||
| _ DIRECTIVE EOL {% ([,directive]) => { return { type: 'directive', value: directive }} %}
|
||||
| _ DIRECTIVE_STATEMENT EOL {% ([,d]) => d %}
|
||||
| _ %IMPORT __ STRING __ %AS __ IDENTIFIER EOL {% ([,,,moduleName,,,,identifier]) => { return { type: 'import', name: identifier, importName: moduleName }} %}
|
||||
| _ %RUNTIME __ %MEMBER __ IDENTIFIER EOL {% ([,,,,,identifier]) => {return{ type: 'variable', persist: false, name: identifier }} %}
|
||||
| _ %MEMBER __ IDENTIFIER EOL {% ([,,,identifier]) => {return{ type: 'variable', persist: true, name: identifier }} %}
|
||||
|
||||
DIRECTIVE -> _ %SINGLETON {% () => 'singleton' %}
|
||||
| _ %KEEPALIVE {% () => 'keepalive' %}
|
||||
FUNCTION_DECLARATION -> _ IDENTIFIER _ PARAMETERS:? _ JS_BLOCK EOL {% ([,name,,params,,block]) => { return { type: 'function', name: name, block, parameters: params } } %}
|
||||
| _ %ASYNC __ IDENTIFIER _ PARAMETERS:? _ JS_BLOCK_ASYNC EOL {% ([,name,,params,,block]) => { return { type: 'function', name: name, block, parameters: params } } %}
|
||||
|
||||
DIRECTIVE_STATEMENT -> DIRECTIVE __ OPEN_PARAMETERS EOL {% ([,directive,,parameters]) => { return { type: 'directive', value: directive, parameters }} %}
|
||||
| DIRECTIVE EOL {% ([directive,,]) => { return { type: 'directive', value: directive }} %}
|
||||
|
||||
DIRECTIVE -> %SINGLETON {% () => 'singleton' %}
|
||||
| %KEEPALIVE {% () => 'keepalive' %}
|
||||
|
||||
LINK_DECLARATION -> _ %LINK __ IDENTIFIER {% ([,,,id]) => { return { type: 'link', array: false, required: false, name: id }} %}
|
||||
| _ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,id]) => { return { type: 'link', array: true, required: false, name: id }} %}
|
||||
|
|
@ -21,11 +27,17 @@ LINK_DECLARATION -> _ %LINK __ IDENTIFIER {% ([,,,id]) => { return { type: 'link
|
|||
NAMESPACE -> IDENTIFIER
|
||||
| IDENTIFIER %DOTOP NAMESPACE {% ([a,,b]) => { return [`${a}.${b}`] } %}
|
||||
|
||||
OPEN_PARAMETERS -> _ IDENTIFIER _ ADDITIONAL_PARAMETERS:? _ {% ([,identifier,,more,]) => more ? [identifier, ...more] : [identifier] %}
|
||||
PARAMETERS -> _ %LPAREN _ IDENTIFIER _ ADDITIONAL_PARAMETERS:? _ %RPAREN _ {% ([,,,identifier,,more,,,]) => more ? [identifier, ...more] : [identifier] %}
|
||||
ADDITIONAL_PARAMETERS -> "," _ IDENTIFIER _ ADDITIONAL_PARAMETERS:? {% ([,,identifier,,more]) => more ? [identifier, ...more] : [identifier] %}
|
||||
|
||||
EOL -> _ %SEMICOLON:?
|
||||
STRING -> %STRING {% ([d]) => d.value.substring(1, d.value.length - 1) %}
|
||||
SEMICOLON -> %SEMICOLON
|
||||
IDENTIFIER -> %IDENTIFIER {% ([id]) => id.value %}
|
||||
JS_BLOCK -> %JS_BLOCK {% ([block]) => (`result = (() => {${block.value.substring(2, block.value.length - 2)}})();`) %}
|
||||
| %JS_BLOCK2 {% ([block]) => (`result = (() => {${block.value.substring(1, block.value.length - 1)}})();`) %}
|
||||
JS_BLOCK -> %JS_BLOCK {% ([block]) => minify(`result = (() => {${block.value.substring(2, block.value.length - 2)}})();`) %}
|
||||
| %JS_BLOCK2 {% ([block]) => minify(`result = (() => {${block.value.substring(1, block.value.length - 1)}})();`) %}
|
||||
JS_BLOCK_ASYNC -> %JS_BLOCK {% ([block]) => minify(`result = (async () => {${block.value.substring(2, block.value.length - 2)}})();`) %}
|
||||
| %JS_BLOCK2 {% ([block]) => minify(`result = (async () => {${block.value.substring(1, block.value.length - 1)}})();`) %}
|
||||
_ -> null | %SPACE {% () => undefined %}
|
||||
__ -> %SPACE {% () => undefined %}
|
||||
7
run.js
7
run.js
|
|
@ -44,10 +44,13 @@ function createParser() {
|
|||
MEMBER: 'member',
|
||||
RUNTIME: 'runtime',
|
||||
IMPORT: 'import',
|
||||
ASYNC: 'async',
|
||||
AS: 'as',
|
||||
STRING: /'(?:\\['\\]|[^\n'\\])*'/,
|
||||
ARRAY: '[]',
|
||||
OBJECT: '{}',
|
||||
LPAREN: '(',
|
||||
RPAREN: ')',
|
||||
DOTOP: '.',
|
||||
JS_BLOCK: /\[\[[^]*?\n\]\]$/,
|
||||
JS_BLOCK2: /{[^]*?\n}$/,
|
||||
|
|
@ -122,6 +125,10 @@ async function parseModule(location) {
|
|||
parser.finish();
|
||||
const parsed = parser.results[0];
|
||||
|
||||
console.log('='.repeat(80));
|
||||
console.log(location);
|
||||
console.log(parsed);
|
||||
|
||||
module.name.last = name;
|
||||
module.name.full = name;
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ restore {
|
|||
this.nitrogen ??= Math.floor(Math.random() * 50);
|
||||
}
|
||||
|
||||
takeNitrogen (requested) {
|
||||
async takeNitrogen (requested) {
|
||||
// give as much nutrients as we can!
|
||||
const given = Math.max(this.nitrogen, requested);
|
||||
this.nitrogen -= given;
|
||||
|
|
|
|||
Reference in New Issue