Skip to content

Commit

Permalink
Add DefinitionInfo and DefinitionInfoMap (#221)
Browse files Browse the repository at this point in the history
The `DefinitionInfoMap` is a maplike data structure that manages
`DefinitionInfo` by IDL definition type name. It is exposed to global
scope. It will be used for constructing IR(Intermediate Result) later.

ISSUE=#207
  • Loading branch information
romandev committed Dec 20, 2017
1 parent 9d49a40 commit 122c7ca
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 15 deletions.
23 changes: 13 additions & 10 deletions generator/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,27 @@
*/

import * as file from 'generator/base/file';
import {DefinitionInfo} from 'generator/new_parser/definition_info';
import {DefinitionInfoMap} from 'generator/new_parser/definition_info_map';
import {Parser} from 'generator/new_parser/parser';

async function processIDL(idlFilePath: string): Promise<void> {
async function readAndParse(idlFilePath: string): Promise<void> {
const idlFragment: string = await file.read(idlFilePath);
await Parser.parse(idlFragment);
const idlDefinitionInfos: DefinitionInfo[] = await Parser.parse(idlFragment);
DefinitionInfoMap.update(idlDefinitionInfos);
}

export async function run(idlFilePaths: string[]): Promise<number> {
const readIDLFileTasks: Promise<void>[] = [];
async function buildDefinitionInfoMap(idlFilePaths: string[]): Promise<void> {
const tasks: Promise<void>[] = [];
idlFilePaths.forEach((idlFilePath) => {
readIDLFileTasks.push(processIDL(idlFilePath));
tasks.push(readAndParse(idlFilePath));
});

try {
await Promise.all(readIDLFileTasks);
} catch (e) {
return e;
}
await Promise.all(tasks);
}

export async function run(idlFilePaths: string[]): Promise<number> {
await buildDefinitionInfoMap(idlFilePaths);

return 0;
}
19 changes: 19 additions & 0 deletions generator/new_parser/definition_info.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* Copyright (c) 2017 The Bacardi Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

export interface DefinitionInfo {
name: string;
}
38 changes: 38 additions & 0 deletions generator/new_parser/definition_info_map.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* Copyright (c) 2017 The Bacardi Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import {DefinitionInfo} from 'generator/new_parser/definition_info';

interface DefinitionInfoStore {
[index: string]: DefinitionInfo;
}

const store: DefinitionInfoStore = {};

/**
* Raw definition information mapping table (exposed to global scope)
*/
export class DefinitionInfoMap {
public static update(definitionInfos: DefinitionInfo[]): void {
definitionInfos.forEach((definitionInfo: DefinitionInfo) => {
store[definitionInfo.name] = definitionInfo;
});
}

public static getByTypeName(typeName: string): DefinitionInfo {
return store[typeName];
}
}
9 changes: 4 additions & 5 deletions generator/new_parser/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,15 @@
* limitations under the License.
*/

import {DefinitionInfo} from 'generator/new_parser/definition_info';
import {DefinitionInfoMap} from 'generator/new_parser/definition_info_map';
import * as webidl from 'webidl2';

/**
* WebIDL Parser
*/
export class Parser {
public static async parse(idlFragment: string):
Promise<void> {
const astData: {}[] = webidl.parse(idlFragment);

// Not implemented yet.
public static async parse(idlFragment: string): Promise<DefinitionInfo[]> {
return webidl.parse(idlFragment);
}
}
1 change: 1 addition & 0 deletions tslint.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"export-name": false,
"function-name": false,
"indent": [true, 2],
"interface-name": false,
"match-default-export-name": false,
"max-line-length": [true, 80],
"no-stateless-class": false,
Expand Down

0 comments on commit 122c7ca

Please sign in to comment.