413 { |
413 { |
414 span.name match { |
414 span.name match { |
415 // inlined errors |
415 // inlined errors |
416 case Thy_Header.THEORY => |
416 case Thy_Header.THEORY => |
417 val reader = Scan.char_reader(Token.implode(span.content)) |
417 val reader = Scan.char_reader(Token.implode(span.content)) |
418 val imports_pos = resources.check_thy_reader(node_name, reader).imports_pos |
418 val header = resources.check_thy_reader(node_name, reader) |
|
419 val imports_pos = header.imports_pos |
419 val raw_imports = |
420 val raw_imports = |
420 try { |
421 try { |
421 val read_imports = Thy_Header.read(reader, Token.Pos.none).imports |
422 val read_imports = Thy_Header.read(reader, Token.Pos.none).imports |
422 if (imports_pos.length == read_imports.length) read_imports else error("") |
423 if (imports_pos.length == read_imports.length) read_imports else error("") |
423 } |
424 } |
424 catch { case exn: Throwable => List.fill(imports_pos.length)("") } |
425 catch { case _: Throwable => List.fill(imports_pos.length)("") } |
425 |
426 |
426 val errors = |
427 val errs1 = |
427 for { ((import_name, pos), s) <- imports_pos zip raw_imports if !can_import(import_name) } |
428 for { ((import_name, pos), s) <- imports_pos zip raw_imports if !can_import(import_name) } |
428 yield { |
429 yield { |
429 val completion = |
430 val completion = |
430 if (Thy_Header.is_base_name(s)) resources.complete_import_name(node_name, s) else Nil |
431 if (Thy_Header.is_base_name(s)) resources.complete_import_name(node_name, s) else Nil |
431 val msg = |
432 "Bad theory import " + |
432 "Bad theory import " + |
433 Markup.Path(import_name.node).markup(quote(import_name.toString)) + |
433 Markup.Path(import_name.node).markup(quote(import_name.toString)) + |
434 Position.here(pos) + Completion.report_theories(pos, completion) |
434 Position.here(pos) + Completion.report_theories(pos, completion) |
|
435 Exn.Exn[Command.Blob](ERROR(msg)) |
|
436 } |
435 } |
437 (errors, -1) |
436 val errs2 = |
|
437 for { |
|
438 (_, spec) <- header.keywords |
|
439 if !Command_Span.load_commands.exists(_.name == spec.load_command) |
|
440 } yield { "Unknown load command specification: " + quote(spec.load_command) } |
|
441 ((errs1 ::: errs2).map(msg => Exn.Exn[Command.Blob](ERROR(msg))), -1) |
438 |
442 |
439 // auxiliary files |
443 // auxiliary files |
440 case _ => |
444 case _ => |
441 val (files, index) = span.loaded_files(syntax) |
445 val (files, index) = span.loaded_files(syntax) |
442 val blobs = |
446 val blobs = |