about summary refs log blame commit diff stats
path: root/translate_subx_debug
blob: 7f558fc9f85948d07aaa1dddc716da483055f05e (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
         
                                                             
 








                                                                              
 






                                                                              


      

       
                                                
                                               

                                                
                                                   

              
#!/bin/sh
# Translate given SubX files with debug information on Linux.
#
# Mu provides 3 canonical ways to translate unsafe SubX programs:
#   0. The C++ translator 'bootstrap translate' can generate traces for
#   debugging on Linux or BSD or Mac, but doesn't support any syntax sugar.
#   1. The self-hosted translator can be run natively on Linux using
#   'translate_subx'. It is fast and supports all syntax sugar, but you get no
#   trace for debugging.
#   2. The self-hosted translator can be run emulated on Linux or BSD or Mac
#   using 'translate_subx_emulated'. It supports all syntax sugar. However, it
#   can be slow if you generate traces.
#
# This script fills in the gap above by stitching together aspects from
# multiple approaches. It translates syntax sugar natively, but emulates lower
# levels using the C++ translator. The result is complete and relatively fast
# even when generating traces.
#
# The cost: it needs Linux. There is no script to generate traces while
# running emulated on BSD or Mac. That's often impractically slow.

set -e

./build

cat $*          |apps/braces          > a.braces
cat a.braces    |apps/calls           > a.calls
cat a.calls     |apps/sigils          > a.sigils

./bootstrap_bin --debug translate a.sigils -o a.elf

chmod +x a.elf
Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
package compose

import (
	"fmt"

	"git.sr.ht/~sircmpwn/aerc/widgets"
)

type NextPrevField struct{}

func init() {
	register(NextPrevField{})
}

func (NextPrevField) Aliases() []string {
	return []string{"next-field", "prev-field"}
}

func (NextPrevField) Complete(aerc *widgets.Aerc, args []string) []string {
	return nil
}

func (NextPrevField) Execute(aerc *widgets.Aerc, args []string) error {
	if len(args) > 2 {
		return nextPrevFieldUsage(args[0])
	}
	composer, _ := aerc.SelectedTab().(*widgets.Composer)
	if args[0] == "prev-field" {
		composer.PrevField()
	} else {
		composer.NextField()
	}
	return nil
}

func nextPrevFieldUsage(cmd string) error {
	return fmt.Errorf("Usage: %s", cmd)
}