summary refs log tree commit diff stats
path: root/compiler/nir/nirc.nim
blob: 363507ca6537f44ef0499d7498612e3e5d611082 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#
#
#           The Nim Compiler
#        (c) Copyright 2023 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

## Nir Compiler. Currently only supports a "view" command.

import ".." / ic / [bitabs, rodfiles]
import nirinsts, nirtypes, nirlineinfos, nirfiles #, nir2gcc

proc view(filename: string) =
  let m = load(filename)
  var res = ""
  allTreesToString m.code, m.lit.strings, m.lit.numbers, m.symnames, res
  res.add "\n# TYPES\n"
  nirtypes.toString res, m.types
  echo res

proc libgcc(filename: string) =
  let m = load(filename)
  #gcc m, filename

import std / [syncio, parseopt]

proc writeHelp =
  echo """Usage: nirc view|gcc <file.nir>"""
  quit 0

proc main =
  var inp = ""
  var cmd = ""
  for kind, key, val in getopt():
    case kind
    of cmdArgument:
      if cmd.len == 0: cmd = key
      elif inp.len == 0: inp = key
      else: quit "Error: too many arguments"
    of cmdLongOption, cmdShortOption:
      case key
      of "help", "h": writeHelp()
      of "version", "v": stdout.write "1.0\n"
    of cmdEnd: discard
  if inp.len == 0:
    quit "Error: no input file specified"
  case cmd
  of "", "view":
    view inp
  of "gcc":
   libgcc inp

main()