Now query() returns maybe

master
Paul Loyd 2017-12-03 14:55:18 +03:00
parent d2e2e6ea63
commit 5d406112e5
3 changed files with 13 additions and 11 deletions

View File

@ -48,7 +48,7 @@ export default class Context {
this._scope.addExport(name, reference); this._scope.addExport(name, reference);
} }
query(name: string, params: ?(?Type)[]): Type { query(name: string, params: ?(?Type)[]): ?Type {
const param = wu(this._params).find(p => p.name === name); const param = wu(this._params).find(p => p.name === name);
if (param) { if (param) {

View File

@ -54,7 +54,7 @@ function processInterfaceDeclaration(ctx: Context, node: InterfaceDeclaration) {
const {name} = extend.id; const {name} = extend.id;
const type = ctx.query(name); const type = ctx.query(name);
invariant(type.id); invariant(type && type.id);
const reference = t.createReference(t.clone(type.id)); const reference = t.createReference(t.clone(type.id));
@ -85,7 +85,7 @@ function processClassDeclaration(ctx: Context, node: ClassDeclaration) {
const base = ctx.query(node.superClass.name); const base = ctx.query(node.superClass.name);
invariant(base.id); invariant(base && base.id);
const baseRef = t.createReference(t.clone(base.id)); const baseRef = t.createReference(t.clone(base.id));
const intersection = t.createIntersection([baseRef, type]); const intersection = t.createIntersection([baseRef, type]);
@ -269,8 +269,12 @@ function makeReference(ctx: Context, node: GenericTypeAnnotation): ?Type {
const type = ctx.query(name, params); const type = ctx.query(name, params);
if (!type) {
return null;
}
if (!type.id) { if (!type.id) {
return type; return t.clone(type);
} }
return t.createReference(t.clone(type.id)); return t.createReference(t.clone(type.id));

View File

@ -86,7 +86,7 @@ export default class Collector {
} }
} }
_query(scope: Scope, name: string, params: (?Type)[]): Type { _query(scope: Scope, name: string, params: (?Type)[]): ?Type {
let result = scope.query(name, params); let result = scope.query(name, params);
// TODO: warning. // TODO: warning.
@ -153,11 +153,7 @@ export default class Collector {
case 'special': case 'special':
default: default:
const resolve = id => this._fund.take(id); const resolve = id => this._fund.take(id);
const type = result.call(params, resolve); return result.call(params, resolve);
invariant(type);
return type;
} }
} }
@ -165,7 +161,9 @@ export default class Collector {
for (const [scope, name] of module.exports()) { for (const [scope, name] of module.exports()) {
const type = this._query(scope, name, []); const type = this._query(scope, name, []);
this._fund.put(type, true); if (type) {
this._fund.put(type, true);
}
} }
} }
} }