@@ -4,12 +4,7 @@ import {Node} from "../model/model";
4
4
import ECore from "ecore/dist/ecore" ;
5
5
import { Position } from "../model/position" ;
6
6
import { PARSER_EPACKAGE , PARSER_TRACE_ECLASS } from "./parser-package" ;
7
- import {
8
- THE_AST_EPACKAGE ,
9
- THE_NODE_ORIGIN_ECLASS ,
10
- THE_RESULT_ECLASS as THE_RESULT_ECLASS_V2
11
- } from "./starlasu-v2-metamodel" ;
12
- import { THE_RESULT_ECLASS as THE_RESULT_ECLASS_V1 } from "./kolasu-v1-metamodel" ;
7
+ import { THE_AST_EPACKAGE , THE_NODE_ORIGIN_ECLASS , } from "./starlasu-v2-metamodel" ;
13
8
import { Issue } from "../validation" ;
14
9
import {
15
10
THE_TRANSPILATION_TRACE_ECLASS ,
@@ -19,7 +14,7 @@ import {
19
14
} from "./transpilation-package" ;
20
15
import { TRANSPILATION_EPACKAGE_V1 } from "./transpilation-package-v1" ;
21
16
import { ensureEcoreContainsAllDataTypes } from "./ecore-patching" ;
22
- import { NodeAdapter , TraceNode } from "../trace/trace-node" ;
17
+ import { NodeAdapter , ParserNode , TraceNode } from "../trace/trace-node" ;
23
18
24
19
export function saveForStrumentaPlayground < R extends Node > (
25
20
result : ParsingResult < R > , name : string ,
@@ -51,52 +46,29 @@ export function saveForStrumentaPlayground<R extends Node>(
51
46
}
52
47
53
48
export class ParserTrace {
54
- constructor ( private eo : ECore . EObject ) {
55
- if ( ! eo . eClass == PARSER_TRACE_ECLASS ) {
56
- throw new Error ( "Not a parser trace: " + eo . eClass ) ;
49
+ constructor ( private node : NodeAdapter ) {
50
+ if ( node . nodeDefinition ?. package != "StrumentaLanguageSupportParsing" || node . nodeDefinition ?. name != "ParserTrace" ) {
51
+ throw new Error ( "Not a parser trace: " + node . nodeDefinition ?. package + "." + node . nodeDefinition ?. name ) ;
57
52
}
58
53
}
59
54
60
55
get rootNode ( ) : ParserNode {
61
56
let root ;
62
- const ast = this . eo . get ( "ast" ) ;
63
- if ( ast . eClass == THE_RESULT_ECLASS_V2 || ast . eClass == THE_RESULT_ECLASS_V1 ) {
57
+ const ast = this . node . get ( "ast" ) ;
58
+ if ( ast ?. nodeDefinition ?. name == "Result" ) {
64
59
root = ast . get ( "root" ) ;
65
60
} else {
66
61
root = ast ;
67
62
}
68
- return new ParserNode ( new ECoreNode ( root ) , undefined , this ) ;
63
+ return new ParserNode ( root ) ;
69
64
}
70
65
71
66
get issues ( ) : Issue [ ] {
72
- const ast = this . eo . get ( "ast" ) ;
73
- if ( ast . eClass == THE_RESULT_ECLASS_V2 || ast . eClass == THE_RESULT_ECLASS_V1 ) {
74
- return fromEObject ( ast . get ( "issues" ) ) as Issue [ ] || [ ] ;
75
- } else {
76
- return [ ] ;
77
- }
67
+ return this . node . get ( "ast" ) ?. getIssues ( ) || [ ] ;
78
68
}
79
69
80
70
get name ( ) : string | undefined {
81
- return this . eo . get ( "name" ) ;
82
- }
83
- }
84
-
85
- export class ParserNode extends TraceNode {
86
-
87
- parent ?: ParserNode ;
88
-
89
- constructor ( inner : NodeAdapter , parent : ParserNode | undefined , protected trace : ParserTrace ) {
90
- super ( inner ) ;
91
- this . parent = parent ;
92
- }
93
-
94
- getChildren ( role ?: string ) : ParserNode [ ] {
95
- return this . nodeAdapter . getChildren ( role ) . map ( ( c ) => new ParserNode ( c , this , this . trace ) ) ;
96
- }
97
-
98
- get children ( ) : Node [ ] {
99
- return this . getChildren ( ) ;
71
+ return this . node . getAttribute ( "name" ) ;
100
72
}
101
73
}
102
74
@@ -154,7 +126,7 @@ export class ParserTraceLoader {
154
126
const resource = this . resourceSet . create ( { uri : uri } ) ;
155
127
return withLanguageMetamodel (
156
128
this . languages , language , this . resourceSet , resource ,
157
- ( ) => new ParserTrace ( loadEObject ( trace , resource , PARSER_TRACE_ECLASS ) ) ) ;
129
+ ( ) => new ParserTrace ( new ECoreNode ( loadEObject ( trace , resource , PARSER_TRACE_ECLASS ) ) ) ) ;
158
130
}
159
131
}
160
132
0 commit comments