Skip to content

Commit

Permalink
Add DefinitionInfo and DefinitionInfoMap
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 f050b5b
Show file tree
Hide file tree
Showing 4 changed files with 70 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 {IDefinitionInfo} 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: IDefinitionInfo[] = 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 IDefinitionInfo {
name: string;
}
34 changes: 34 additions & 0 deletions generator/new_parser/definition_info_map.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* 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 {IDefinitionInfo} from 'generator/new_parser/definition_info';

const definitionInfoMap: {} = {};

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

public static getByTypeName(typeName: string): IDefinitionInfo {
return definitionInfoMap[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 {IDefinitionInfo} 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<IDefinitionInfo[]> {
return webidl.parse(idlFragment);
}
}

0 comments on commit f050b5b

Please sign in to comment.